require 'ruby2d'

set width: 700, height: 500, title: "Ruby 2D – Test Card"

# Read window attributes
puts "=== Window Attributes ===
Title:  #{get :title}
Width:  #{get :width}
Height: #{get :height}
FPS:    #{get :fps}
Self:   #{get :window}\n\n"

# Primary colors
Rectangle.new(0, 0, 50, 100,   [1.0, 0, 0, 1.0])
Rectangle.new(50, 0, 50, 100,  [0, 1.0, 0, 1.0])
Rectangle.new(100, 0, 50, 100, [0, 0, 1.0, 1.0])

# Color strings
Square.new(   150, 0, 50,      'black')
Square.new(   200, 0, 50,      'gray')
Square.new(   250, 0, 50,      'silver')
Square.new(   300, 0, 50,      'white')
Rectangle.new(350, 0, 50, 50,  'navy')
Rectangle.new(400, 0, 50, 50,  'blue')
Rectangle.new(450, 0, 50, 50,  'aqua')
Rectangle.new(500, 0, 50, 50,  'teal')
Rectangle.new(550, 0, 50, 50,  'olive')

Rectangle.new(150, 50, 50, 50, 'green')
Rectangle.new(200, 50, 50, 50, 'lime')
Rectangle.new(250, 50, 50, 50, 'yellow')
Rectangle.new(300, 50, 50, 50, 'orange')
Rectangle.new(350, 50, 50, 50, 'red')
Rectangle.new(400, 50, 50, 50, 'maroon')
Rectangle.new(450, 50, 50, 50, 'fuchsia')
Rectangle.new(500, 50, 50, 50, 'purple')
Rectangle.new(550, 50, 50, 50, 'brown')

# Mix of named colors and numbers
Rectangle.new(600, 0, 50, 50,
[
  'red',
  'green',
  'blue',
  'yellow'
])
Rectangle.new(650, 0, 50, 50,
[
  [1.0, 0, 0, 255],
  'green',
  [0.0, 0, 255, 1.0],
  'yellow'
])
Rectangle.new(600, 50, 50, 50, 'random')
Rectangle.new(650, 50, 50, 50, 'random')

# White to black gradient
Rectangle.new(0, 100, 700, 25,
[
  [1.0, 1.0, 1.0, 1.0],
  [0.0, 0.0, 0.0, 0.0],  # testing Float
  [  0,   0,   0,   0],  # testing Fixnum
  [1.0, 1.0, 1.0, 1.0]
])

# Color gradient
Rectangle.new(0, 125, 700, 50,
[
  [1.0, 0.0, 0.0, 1.0],
  [0.0, 1.0, 0.0, 1.0],
  [0.0, 0.0, 1.0, 1.0],
  [1.0, 1.0, 0.0, 1.0]
])

# Transparancy
Rectangle.new(0, 165, 700, 35,
[
  [1.0, 1.0, 1.0, 0.0],
  [1.0, 1.0, 1.0, 1.0],
  [1.0, 1.0, 1.0, 1.0],
  [1.0, 1.0, 1.0, 0.0]
])

# Triangles
Triangle.new(25, 200, 50, 250, 0, 250,     [1.0, 0, 0, 1.0])
Triangle.new(75, 200, 100, 250, 50, 250,   [0, 1.0, 1, 1.0])
Triangle.new(125, 200, 150, 250, 100, 250, [0, 0, 1.0, 1.0])
Triangle.new(175, 200, 200, 250, 150, 250,
[
  [1.0, 0, 0, 1.0],
  [0, 1.0, 0, 1.0],
  [0, 0, 1.0, 1.0]
])
Rectangle.new(200, 200, 50, 50, [0.5, 0.5, 0.5, 1.0])  # add background for transparancy
Triangle.new(225, 200, 250, 250, 200, 250,
[
  [1.0, 1.0, 1.0, 1.0],
  [0.0, 0.0, 0.0, 1.0],
  [1.0, 1.0, 1.0, 0.0]
])

# Quadrilaterals
Quad.new(
  300, 200,
  350, 200,
  300, 250,
  250, 250,
  [
    [1.0, 0.0, 0.0, 1.0],
    [0.0, 1.0, 0.0, 1.0],
    [0.0, 0.0, 1.0, 1.0],
    [1.0, 1.0, 0.0, 1.0]
  ]
)

Quad.new(
  250, 200,
  300, 200,
  350, 250,
  300, 250,
  [
    [1.0, 1.0, 1.0, 0.0],
    [1.0, 1.0, 1.0, 0.0],
    [1.0, 1.0, 1.0, 1.0],
    [1.0, 1.0, 1.0, 0.0]
  ]
)

# Images
Image.new(590, 180, "media/image.png")
Image.new(590, 290, "media/image.jpg")
Image.new(590, 400, "media/image.bmp")
img_r = Image.new(350, 200, "media/colors.png")
# img_r.width, img_r.height = 50, 50
# img_r.color = [1.0, 0.3, 0.3, 1.0]
img_g = Image.new(400, 200, "media/colors.png")
# img_g.width, img_g.height = 50, 50
# img_g.color = [0.3, 1.0, 0.3, 1.0]
img_b = Image.new(450, 200, "media/colors.png")
# img_b.width, img_b.height = 50, 50
# img_b.color = [0.3, 0.3, 1.0, 1.0]

# Text
txt_r = Text.new( 44, 202, 20, "R", "media/bitstream_vera/vera.ttf")
# txt_r.color = [1.0, 0.0, 0.0, 1.0]
txt_g = Text.new( 92, 202, 20, "G", "media/bitstream_vera/vera.ttf")
# txt_g.color = [0.0, 1.0, 0.0, 1.0]
txt_b = Text.new(144, 202, 20, "B", "media/bitstream_vera/vera.ttf")
# txt_b.color = [0.0, 0.0, 1.0, 1.0]

# Frames per second
fps = Text.new(10, 470, 20, "media/bitstream_vera/vera.ttf")

# Sprites
s1 = Sprite.new(500, 200, "media/sprite_sheet.png")
s1.add(forwards: [
  [  0, 0, 50, 50, 30],
  [ 50, 0, 50, 50, 40],
  [100, 0, 50, 50, 50],
  [150, 0, 50, 50, 60]
])

# Pointer for mouse
pointer = Square.new(0, 0, 10, 'white')

on key: 'escape' do
  close
end

update do
  pointer.x = (get :mouse_x) - 5
  pointer.y = (get :mouse_y) - 7
  s1.animate(:forwards)
  fps.text = "FPS: #{(get :fps).round(3)}"
end

show
